package com.qqtech.qquan.hi.service;

import java.math.BigDecimal;
import java.sql.Timestamp;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import com.qqtech.core.frame.model.Result;
import com.qqtech.core.frame.service.BaseService;
import com.qqtech.qquan.hi.model.HiRuleResult;
import com.qqtech.qquan.hi.model.HiRuleResultQuery;
import com.qqtech.qquan.hi.model.HiRuleResultVo;

public interface HiRuleResultService extends BaseService<HiRuleResult> {
	/**
	 * 获得累计圈币
	 * @param query
	 * @return
	 */
	public int queryTotalQuan(HiRuleResultQuery query);
	/**
	 * 获得累计荣誉
	 * @param query
	 * @return
	 */
	public int queryTotalHonor(HiRuleResultQuery query);
	/**
	 * 取出用户最新一条明细
	 * @param userId 用户id
	 * @param 分类HiRuleClassifyEnum:1-注册;2-上传头像等等
	 * @param classifyId 社区id,圈子id等
	 * @return
	 */
	public HiRuleResultVo getNewest(Integer userId, Integer classify, Integer classifyId);
	
	/**
	 * 根据规则id查询数量
	 * @param userId 用户id
	 * @param ruleId 规则id
	 * @param startAt 开始时间
	 * @param endAt 结束时间
	 * @return
	 */
	public int getCountByRuleId(Integer userId, Integer ruleId, Timestamp startAt, Timestamp endAt);
	
	/**
	 * 根据分类id查询数量
	 * @param userId 用户id
	 * @param classify 分类
	 * @param classifyId 社区id,圈子id等
	 * @param startAt 开始时间
	 * @param endAt 结束时间
	 * @return
	 */
	public int getCountByClassifyId(Integer userId, Integer classify, Integer classifyId, Timestamp startAt, Timestamp endAt);
	
	/**
	 * 计算获得的荣誉值和圈币，并保存
	 * @param userId 用户id
	 * @param classify 分类HiRuleClassifyEnum:1-注册;2-上传头像等等
	 * @param classifyId 社区id,圈子id等;不需要则为null
	 * @param times 本次次数
	 * @param lastVo 上次明细
	 * @return
	 */
	public Result handleSave(Integer userId, Integer classify, Integer classifyId, Integer times, HiRuleResultVo lastVo);
	
	/**
	 * 计算获得的荣誉值和圈币，并保存
	 * @param userId 用户id
	 * @param classify 分类HiRuleClassifyEnum:1-注册;2-上传头像等等
	 * @param classifyId 社区id,圈子id等;不需要则为null
	 * @param times 本次次数
	 * @param lastVo 上次明细
	 * @param value 按比例计算的需要传入基数
	 * @return
	 */
	public Result handleSave(Integer userId, Integer classify, Integer classifyId, Integer times, HiRuleResultVo lastVo, BigDecimal value);
	
	/**
	 * 完成所有新手任务后，得到荣誉值
	 * @param userId 用户id
	 */
	public void handleFinishTask(Integer userId);
	
	/**
	 * 管理后台--专用查询
	 * @param query
	 * @param pageable
	 * @return
	 */
	public Page<HiRuleResultVo> queryPageList4Admin(HiRuleResultQuery query, Pageable pageable);
	
	/**
	 * 手工处理荣誉分值
	 * @param userId 用户id
	 * @param addDeleFlag 增减标识
	 * @param honorValue 本次变化的荣誉值
	 * @param quanValue 本次变化的圈币值
	 * @param desc 备注
	 * @param adminUserId 后台操作人id
	 * @return
	 */
	public Result handleManualSave(Integer userId, Integer addDeleFlag, Integer honorValue, Integer quanValue, String desc, Integer adminUserId);
}